﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using DevExpress.XtraGrid.Views.Base;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraGrid;
using DevExpress.Utils;

using DevExpress.XtraEditors.Repository;


using MM.Entities;
using MM.Business;  

namespace MM
{
    public partial class frmTaoPhieuNK : Form
    {
        string _matau = "";
        string _nguoitao = "";        
        string _sConn = "";
        List<CHI_TIET_PDH> lstCT = new List<CHI_TIET_PDH>();

        public frmTaoPhieuNK(string sConn)
        {
            InitializeComponent();
            _sConn = sConn;
            _matau = frmDangNhap.objTau._tenTau2KiTu;
            _nguoitao = frmDangNhap.objTaiKhoan._soCMND;   

            this.txtSoPhieuPO.Select();
            this.txtSoPhieuPO.BackColor = Color.PowderBlue;
            this.lblSoPhieuGR.Text = "";

            this.InitDMKho(_matau);

            this.HienthiPHIEU_DAT_HANG_MAX(_matau);
            this.HienthiCHI_TIET_PDH(this.txtSoPhieuPO.Text.Trim());
        }

        private void HienthiPHIEU_DAT_HANG_MAX(string matau)
        {
            clsPHIEU_DAT_HANG pdhCtrl = new clsPHIEU_DAT_HANG(_sConn);
            List<PHIEU_DAT_HANG> lst = new List<PHIEU_DAT_HANG>();
            lst = pdhCtrl.usp_SelectPHIEU_DAT_HANG_MAX(matau);
            if (lst.Count > 0)
            {
                this.txtSoPhieuPO.Text = lst[0].POThamChieuSAP;
                this.txtPlant.Text = lst[0].PlanReferenceSAP;
                this.txtNguoiThucHien.Text = lst[0].NguoiNhap;
                this.txtNgayThucHien.Text = lst[0].NgayNhap.Day.ToString() + "/" + lst[0].NgayNhap.Month.ToString() + "/" + lst[0].NgayNhap.Year.ToString();
                this.lblLoaiPO.Text = lst[0].LoaiPO;

                this.cmdLuu.Enabled = true;
            }
        }

        private void HienthiPHIEU_DAT_HANG(string POThamChieuSAP)
        {
            clsPHIEU_DAT_HANG pdhCtrl = new clsPHIEU_DAT_HANG(_sConn);
            List<PHIEU_DAT_HANG> lst = new List<PHIEU_DAT_HANG>();
            lst = pdhCtrl.usp_SelectPHIEU_DAT_HANG(POThamChieuSAP);
            if (lst.Count > 0)
            {
                this.txtSoPhieuPO.Text = lst[0].POThamChieuSAP;
                this.txtPlant.Text = lst[0].PlanReferenceSAP;
                this.txtNguoiThucHien.Text = lst[0].NguoiNhap;
                this.txtNgayThucHien.Text = lst[0].NgayNhap.Day.ToString() + "/" + lst[0].NgayNhap.Month.ToString() + "/" + lst[0].NgayNhap.Year.ToString();
                this.lblLoaiPO.Text = lst[0].LoaiPO;

                this.cmdLuu.Enabled = true;
            }
        }
        private void HienthiCHI_TIET_PDH(string POThamChieuSAP)
        {
            int i = 0;
            int j = 0;

            clsCHI_TIET_PDH ctCtrl = new clsCHI_TIET_PDH(_sConn);

            lstCT = ctCtrl.usp_SelectCHI_TIET_PDHByPOThamChieuSAP(POThamChieuSAP);

            lstCT.RemoveAll(delegate(CHI_TIET_PDH x) { return (x.TinhTrang == 1); });

            List<CHI_TIET_PNH> lstctPNH = new List<CHI_TIET_PNH>();

            clsCHI_TIET_PNH ctPNHCtrl = new clsCHI_TIET_PNH(_sConn);
            lstctPNH = ctPNHCtrl.usp_SelectCHI_TIET_PNH_ByPOThamChieuSAP(POThamChieuSAP);
            lstctPNH.RemoveAll(delegate(CHI_TIET_PNH x) { return x.TinhTrang == 1; });
           
            for (i = 0; i < lstCT.Count; i++)
            {
                int machitietpdh = lstCT[i].MaChiTiet;
              
                lstCT[i].SoLuongCon = lstCT[i].SoLuong;
                for (j = 0; j < lstctPNH.Count; j++)
                {
                    if (lstctPNH[j].MaChiTietPDH == machitietpdh)
                    {
                        if (lstctPNH[j].MaPhieuHuyNhapHang == "")
                            lstCT[i].SoLuongCon -= lstctPNH[j].SoLuong;                       
                        
                    }                    
                }                

            }
            this.gridControl1.DataSource = lstCT;
            this.lblSoLuong.Text = "Tổng số item trong PO: "+lstCT.Count.ToString();
        }

        private void InitDMKho(string matau)
        {
            clsKHO khoCtrl = new clsKHO(_sConn);
            List<KHO> lstKho = new List<KHO>();
            lstKho = khoCtrl.LoadKHOByTAU(matau);
            this.lookupKho.DataSource = lstKho;
            this.lookupKho.DisplayMember = "TenKho";
            this.lookupKho.ValueMember = "MaKho";  

            
        }

        private void txtSoPhieuPO_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (this.txtSoPhieuPO.Text.Trim().Length == 10)
                {
                    this.lblSoPhieuGR.Text = "";
                    this.txtSoPhieuPO.BackColor = Color.PowderBlue;

                    string POThamChieuSAP = this.txtSoPhieuPO.Text.Trim();
                    this.HienthiPHIEU_DAT_HANG(POThamChieuSAP);
                    this.HienthiCHI_TIET_PDH(POThamChieuSAP);

                    
                }
                else
                {
                    this.txtSoPhieuPO.BackColor = Color.Red;
                }

            }
        }

        private void gridDSVT_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
        {
            ColumnView col = (ColumnView)this.gridControl1.FocusedView;
            try
            {
                int rowidx = e.RowHandle;
                
                lstCT[rowidx].SoLuongNhap = float.Parse(this.gridDSVT.GetFocusedRowCellValue("SoLuongNhap").ToString());
                lstCT[rowidx].MaKho = this.gridDSVT.GetFocusedRowCellValue("MaKho").ToString();

                if (col.FocusedColumn.Name == "gridColumn7")// so luong nhap
                {


                    int machitietPDH = int.Parse(this.gridDSVT.GetFocusedRowCellValue("MaChiTiet").ToString());
                    float soluongCon = 0;

                  
                    soluongCon = lstCT[rowidx].SoLuongCon;

                   

                    // duyệt grid để cập nhật số lượng còn
                    for (int i = 0; i < lstCT.Count; i++)
                    {
                        //if (i != rowidx && lstCT[i].MaChiTiet == machitietPDH )//&& lstCT[i].SoLuongNhap <= 0)
                        if (lstCT[i].MaChiTiet == machitietPDH)
                        {
                            lstCT[i].SoLuongCon = soluongCon - lstCT[rowidx].SoLuongNhap;
                        }
                    }
                    this.gridControl1.RefreshDataSource();
                }
                
            }
            catch { }
        }

        private void cmdLuu_Click(object sender, EventArgs e)
        {
            PHIEU_NHAP_HANG oPNH = new PHIEU_NHAP_HANG();
            clsPHIEU_NHAP_HANG pnhCtrl = new clsPHIEU_NHAP_HANG(_sConn);
            clsCHI_TIET_PXH pxhCtrl = new clsCHI_TIET_PXH(_sConn);
            List<CHI_TIET_PNH> lstCTPNH = new List<CHI_TIET_PNH>();
            CHI_TIET_PNH obj;

            oPNH.MaTau = _matau;
            oPNH.NgayNhap = DateTime.Today;
            oPNH.NguoiNhap = _nguoitao;
            oPNH.POThamChieuSAP = this.txtSoPhieuPO.Text;

            for (int i = 0; i < lstCT.Count; i++)
            {
               
                float soluongPO = lstCT[i].SoLuong;
                float tongnhap = lstCT[i].SoLuongNhap;
                for (int j = 0; j < lstCT.Count; j++)
                {
                    if (j != i && lstCT[i].MaChiTiet == lstCT[j].MaChiTiet) // cung mot PO item_no
                    {
                        tongnhap += lstCT[j].SoLuongNhap;
                    }
                }
                if (tongnhap<=soluongPO*1.5 )
                {

                    obj = new CHI_TIET_PNH();
                    obj.MaChiTietPDH = lstCT[i].MaChiTiet;
                    obj.MaKho = lstCT[i].MaKho;
                    obj.SoLuong = lstCT[i].SoLuongNhap;
                    obj.MaVTPT = lstCT[i].MaThietBi;
                    obj.MaTrangThai = lstCT[i].MaTrangThai;
                    obj.MaTaiSan = lstCT[i].MaTaiSan;
                    obj.AccAssignment = lstCT[i].AccAssignment;
                    //them vao ngay 07/11/2013
                    obj.POItem_No = lstCT[i].POItem_No;
                    //end of them vao ngay 07/11/2013
                    if ((lstCT[i].MaKho.Trim() != "" || lstCT[i].AccAssignment == "A") && lstCT[i].SoLuongNhap > 0)
                        lstCTPNH.Add(obj);
                }
                else
                {
                    
                    MessageBox.Show("LƯU KHÔNG THÀNH CÔNG!\n TỔNG SỐ LƯỢNG NHẬP KHÔNG ĐƯỢC QUÁ GẤP RƯỠI SỐ LƯỢNG ĐẶT HÀNG");
                    return;
                }
                
            }
            // kiem tra dữ liệu
            for (int i = 0; i < lstCTPNH.Count; i++)
            {
                List<CHI_TIET_PXH> lstCTPXH = new List<CHI_TIET_PXH>();
                if (lstCTPNH[i].MaTrangThai == 1)// gia công
                {
                    lstCTPXH = pxhCtrl.usp_SelectCHI_TIET_PXH_ByPOThamChieuSAP(oPNH.POThamChieuSAP);// tim xem da thuc hien xuat kho vtpt OLD de di gia cong chua?
                    float sl = 0;
                    for (int j = 0; j < lstCTPXH.Count; j++)
                    {
                        // sửa lại ngày 06/11/2013
                        //if (lstCTPNH[i].MaVTPT==lstCTPXH[j].MaThietBi)
                        //    sl += lstCTPXH[j].SoLuong;
                        // end of sửa lại ngày 06/11/2013

                        if (lstCTPNH[i].POItem_No==lstCTPXH[j].MaChiTietPDH)
                            sl += lstCTPXH[j].SoLuong;
                    }
                    if (lstCTPNH[i].SoLuong > sl)
                    {
                        MessageBox.Show("LƯU KHÔNG THÀNH CÔNG!\n VUI LÒNG THỰC HIỆN XUẤT KHO GIA CÔNG TRƯỚC KHI NHẬP KHO VTPT GIA CÔNG");
                        return;
                    }
                }
               
                
            }
            // lưu dữ liệu      
            if (lstCTPNH.Count > 0)
            {
                string maphieunhaphang = pnhCtrl.InsertPHIEU_NHAP_HANG(oPNH, lstCTPNH);
                if (maphieunhaphang == "" || maphieunhaphang.Length != 10)
                    MessageBox.Show("LƯU KHÔNG THÀNH CÔNG");
                else
                    this.lblSoPhieuGR.Text = maphieunhaphang;

                this.cmdLuu.Enabled = false;

                this.HienthiCHI_TIET_PDH(this.txtSoPhieuPO.Text);
            }
            else
                MessageBox.Show("VUI LÒNG NHẬP ĐẦY ĐỦ THÔNG TIN: SỐ LƯỢNG NHẬP - THÔNG TIN KHO ");

        }

        private void lnkXemVTPT_Click(object sender, EventArgs e)
        {
            ColumnView col = (ColumnView)this.gridControl1.FocusedView;
            MessageBox.Show(col.FocusedValue.ToString());
        }

        

        private void label1_Click(object sender, EventArgs e)
        {
            frmTimPhieuDH f = new frmTimPhieuDH(_sConn);
            f.chonPDH += new frmTimPhieuDH.ChonPhieuDatHang(GetPhieuDatHang);
            f.Show(this);        
            
        }

        private void GetPhieuDatHang(object sender, ChonPhieuDHEventArgs e)
        {
            HienthiPHIEU_DAT_HANG(e.POThamChieuSAP);
            HienthiCHI_TIET_PDH(e.POThamChieuSAP);            

        }

        private void frmTaoPhieuNK_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F8) // luu phieu nhap kho
            {
                cmdLuu_Click(null,null);
            }
            else
                if (e.Control && e.KeyCode == Keys.F) // tim so PO
                {
                    label1_Click(null, null);
                }
        }

        private void frmTaoPhieuNK_Load(object sender, EventArgs e)
        {
            Common.SetColor(this);
        }

        private void cOPYToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                int index = -1;
                index = gridDSVT.FocusedRowHandle;
                if (index >= 0   )
                {
                    if (lstCT[index].SoLuongCon > 0)
                    {
                        CHI_TIET_PDH obj = new CHI_TIET_PDH();
                        obj.MaChiTiet = lstCT[index].MaChiTiet;
                        obj.SoLuongCon = lstCT[index].SoLuongCon;
                        //obj.SoLuong = obj.SoLuongCon;
                        obj.SoLuong = lstCT[index].SoLuong;
                        obj.TenVTPT = lstCT[index].TenVTPT;
                        obj.POThamChieuSAP = lstCT[index].POThamChieuSAP;
                        obj.POItem_No = lstCT[index].POItem_No;
                        obj.MaTrangThai = lstCT[index].MaTrangThai;
                        obj.NgayGiaoHang = lstCT[index].NgayGiaoHang;
                        obj.TenTrangThai = lstCT[index].TenTrangThai;
                        obj.AccAssignment = lstCT[index].AccAssignment;
                        obj.MaTaiSan = lstCT[index].MaTaiSan;
                        obj.MaThietBi = lstCT[index].MaThietBi;

                        lstCT.Add(obj);

                        this.gridControl1.RefreshDataSource();
                    }
                    else
                        MessageBox.Show("SAO CHÉP KHÔNG THÀNH CÔNG!\n SỐ LƯỢNG CÒN ĐỂ NHẬP KHO PHẢI >=0");
                }
                else
                    MessageBox.Show("Vui lòng chọn dòng dữ liệu cần Sao chép để NHẬP KHO");

            }
            catch { }
        }

        private void gridDSVT_ValidatingEditor(object sender, DevExpress.XtraEditors.Controls.BaseContainerValidateEditorEventArgs e)
        {
            try
            {
                ColumnView col = (ColumnView)this.gridControl1.FocusedView;
                if (col.FocusedColumn.Name == "gridColumn7")// so luong nhap
                {
                    float soluongcon = float.Parse(this.gridDSVT.GetFocusedRowCellValue("SoLuongCon").ToString());
                    float soluongnhap = float.Parse(e.Value.ToString());
                    float soluongPO = float.Parse(this.gridDSVT.GetFocusedRowCellValue("SoLuong").ToString());
                    float soluongdanhap = soluongPO - soluongcon;
                   
                    if ((soluongPO * 1.5 - (soluongdanhap)) < soluongnhap)
                    {
                        e.Valid = false;
                        e.ErrorText = "Không thể tiếp tục nhập kho cho VTPT này!\nTổng số lượng đã nhập = " + soluongdanhap.ToString();
                        return;
                    }
                }
            }
            catch(Exception ex)
            { }
        }
        

       


      


    }
}